package cn.group.hotel2.service.impl;

import cn.group.hotel2.ex.ServiceException;
import cn.group.hotel2.mapper.MessageMapper;
import cn.group.hotel2.pojo.entity.Message;
import cn.group.hotel2.pojo.vo.*;
import cn.group.hotel2.service.IMessageService;
import cn.group.hotel2.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 处理留言相关数据的业务实现类
 *
 * @author wcl
 * @version 0.0.1
 * @date 2022/11/26
 */
@Slf4j
@Service
public class MessageServiceImpl implements IMessageService {

    @Autowired
    private MessageMapper messageMapper;

    public MessageServiceImpl() {
        log.debug("创建业务类对象:MessageServiceImpl");
    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理【根据留言id删除数据】的业务,参数:{}", id);

        MessageStandardVO queryResult = messageMapper.getStandardById(id);
        log.debug("根据id【{}】查询留言详情,结果为:{}", id, queryResult);
        if (queryResult == null) {
            String message = "删除留言失败,该条数据不存在";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        log.debug("即将删除该条留言");
        int rows = messageMapper.deleteById(id);
        if(rows != 1) {
            String message = "删除留言失败,系统繁忙,请稍后再次尝试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_DELETE, message);
        }
        log.debug("删除完成!");
    }

    @Override
    public void updateStatusById(Long id) {
        log.debug("开始处理【根据留言id修改其状态】的业务,参数:{}", id);
        MessageStandardVO queryResult = messageMapper.getStandardById(id);
        if (queryResult == null) {
            String message = "修改状态失败,该条留言数据不存在";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        Message mess = new Message();
        mess.setId(id);
        mess.setStatus(1);
        log.debug("即将修改其状态");
        int rows = messageMapper.update(mess);
        if(rows != 1) {
            String message = "修改其状态失败,系统繁忙,请稍后再次尝试!";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE, message);
        }
        log.debug("修改状态完成!");
    }

    @Override
    public MessageStandardVO getStandardById(Long id) {
        log.debug("开始处理【根据留言id查询留言数据】的业务,参数:{}", id);

        MessageStandardVO queryResult = messageMapper.getStandardById(id);
        if (queryResult == null) {
            String message = "查询留言数据失败,该条数据不存在";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        log.debug("查询完成,结果为:{}",queryResult);
        return queryResult;
    }

    @Override
    public List<MessageListItemVO> list() {
        log.debug("开始处理【查询留言列表】的业务,无参数");
        return messageMapper.list();
    }

    @Override
    public List<MessageListItemVO> listByPageNum(Long pageNum) {
        log.debug("开始处理【根据所选的页数来分页查询】的业务,参数:{}", pageNum);
        return messageMapper.listByPageNum(pageNum);
    }

    @Override
    public List<MessageListCountVO> listCount() {
        log.debug("开始处理【查询列表所有的数据以统计其数量】的业务,无参数");
        return messageMapper.listCount();
    }

    @Override
    public List<ReplyListItemVO> listById(Long id) {
        log.debug("开始处理【根据留言id查询回复列表】的业务,参数:{}", id);
        return messageMapper.listById(id);
    }

    @Override
    public List<MessageListItemVO> listWaitReply() {
        log.debug("开始处理【查询处于待回复状态下的留言列表】的业务,无参数");
        return messageMapper.listWaitReply();
    }

    @Override
    public List<MessageListItemVO> listWaitReplyByPageNum(Long pageNum) {
        log.debug("开始处理【根据所选的页数来分页查询处于待回复状态下】的业务,参数:{}", pageNum);
        return messageMapper.listWaitReplyByPageNum(pageNum);
    }

    @Override
    public List<MessageListCountVO> listWaitReplyCount() {
        log.debug("开始处理【查询处于待回复状态下的列表所有的数据以统计其数量】的业务,无参数");
        return messageMapper.listWaitReplyCount();
    }

    @Override
    public List<MessageListItemVO> listReply() {
        log.debug("开始处理【查询处于已回复状态下的留言列表】的业务,无参数");
        return messageMapper.listReply();
    }

    @Override
    public List<MessageListItemVO> listReplyByPageNum(Long pageNum) {
        log.debug("开始处理【根据所选的页数来分页查询处于已回复状态下的】的业务,参数:{}", pageNum);
        return messageMapper.listReplyByPageNum(pageNum);
    }

    @Override
    public List<MessageListCountVO> listReplyCount() {
        log.debug("开始处理【查询处于已回复状态下的列表所有的数据以统计其数量】的业务,无参数");
        return messageMapper.listReplyCount();
    }
}
